<?php
/**
 * Inicializa todo el Framework
 *
 * Para ver los cambios d ela version ver "version.txt"
 */

if (!isset($_SESSION["PATH"])) {
  define("PATH","");
} else {
  define("PATH",$_SESSION["PATH"]);
}

if (!isset($_SESSION["ENTORNO"])) {
  define("ENTORNO","");
} else {
  define("ENTORNO",$_SESSION["ENTORNO"]);
}

putenv('GDFONTPATH=' . realpath(PATH.'../frame/fuentes/'));
require_once realpath(PATH.'../frame/funciones/generales.php');
require_once realpath(PATH.'../frame/libs/Smarty/Smarty.class.php');

/**
 * Autoload
 * Orden de busqueda: 
 *  - framework
 *  - datamanagers
 *  - interfaces
 *  - sitio 
 *  - por ultimo en las librerias
 *
 * @param String $clase
 * @return $clase
 */
function autoload($clase) {
  if (isset($_SESSION["ENTORNO"]) && $_SESSION["ENTORNO"] != "principal" ) {
    $subfolder = $_SESSION["ENTORNO"]."/";
  } else {
    $subfolder = "";
  }
  
  //TODO: ver el tema de las rutas en el config.ini
  if(class_exists($clase)) {
    return;
  } elseif (file_exists(realpath(PATH."../frame/clases/".$clase.".class.php"))) { //buscamos en la clase del framework
    require_once PATH."../frame/clases/".$clase.".class.php";
  } elseif (file_exists(realpath(PATH."../frame/datamanagers/".$clase.".class.php"))) { //buscamos el datamanager
    require_once PATH."../frame/datamanagers/".$clase.".class.php";
  } elseif (file_exists(realpath(PATH."../frame/interfaces/".$clase.".interface.php"))) { //buscamos la interface
    require_once PATH."../frame/interfaces/".$clase.".interface.php";
  } elseif (file_exists(realpath(PATH."../clases/".$subfolder.$clase.".class.php"))) { //buscamos las clases del sitio
    require_once PATH."../clases/".$subfolder.$clase.".class.php";
  } elseif (file_exists(realpath(PATH."../clases/entidades/".$clase.".entity.php"))) { //buscamos en las entidades del sitio
    require_once PATH."../clases/entidades/".$clase.".entity.php";
  } elseif (file_exists(realpath(PATH."../clases/".$clase."/".$clase.".class.php"))) { //buscamos las clases del sitio (subdirectorio)
    require_once PATH."../clases/".$clase."/".$clase.".class.php";
  } elseif (file_exists(realpath(PATH."../frame/libs/".$clase."/".$clase.".class.php"))) { //buscamos las librerias
    require_once PATH."../frame/libs/".$clase."/".$clase.".class.php";
  } elseif (is_string((configManager::obtener("librerias",$clase)))) { //buscamos las librerias del config
    require_once PATH."../frame/libs/".configManager::obtener("librerias",$clase);
  } else {
    if (configManager::obtener("general", "devmode")) {
      echo "No se pudo cargar la clase:".$clase;
      echo PATH."../clases/".$subfolder.$clase.".class.php";
  echo file_exists(realpath(PATH."../clases/".$subfolder.$clase.".class.php"));
      throw new Exception("No se pudo cargar la clase:".$clase);
    } else {
      $tpl = new template("404.tpl");
      echo $tpl->mostrar();
    }
    die();
  }
}
spl_autoload_register("autoload");
spl_autoload_register('smartyAutoload');

//cargamos la config del sitio
configManager::init();

//cargamos el manejador de errores ver config.ini
if (configManager::obtener("errors","log")) {
  error_reporting(configManager::obtener("errors","report_level"));
  set_error_handler(array("errorManager","grabar"));
}

// cargamos todos los defines
load_defines();

$smarty = smartyManager::tomar();
?>